#ifndef	_J_PRIORITETI_H_
#define	_J_PRIORITETI_H_

#include "tipovi.h"
#include "postavke.h"
#include "ispis.h"

typedef struct _din_prio_t_ {
	int zadnji;
	struct {
		void *razlog;	//razlog povecanja prioriteta (adresa objekta)
		int sprio;	//stari prioritet
	} pri[NAJ_DIN_PRIO];
} din_prio_t;

static inline int j_povecaj_din_prio (din_prio_t *dp, int sprio, int nprio, 
					void *razlog)
{
	if (sprio <= nprio)
		return 1; //nema potrebe za povecavanjem
	
	if (dp->zadnji >= NAJ_DIN_PRIO) {
		j_ispisi("Ne moze se vise povecavati prioritet!\n");
		return -1;
	}
	
	dp->pri[dp->zadnji].razlog = razlog;
	dp->pri[dp->zadnji].sprio = sprio;
	dp->zadnji++;
	
	return 0;
}

static inline int j_vrati_din_prio (din_prio_t *dp, void *razlog)
{
	int i, sprio = -1;

	if (dp->zadnji == 0) {
		return -1;
	}
	
	for (i = 0; i < dp->zadnji; i++)
		if (dp->pri[i].razlog == razlog)
			dp->pri[i].razlog = NULL;

	for (i = dp->zadnji - 1; i >= 0; i--)
		if (dp->pri[i].razlog == NULL)
			sprio = dp->pri[i].sprio;
		else
			break;
	
	dp->zadnji = i + 1;

	return sprio;
}


#endif	/* _J_PRIORITETI_H_ */